Is it a class or a package?

The first thing to do when you want to put some new LATEX commands in a file is to decide whether it should be a document class or a package. The rule of thumb is:

If the commands could be used with any document class, then make them a package; and if not, then make them a class.

There are two major types of class: those like |article|, |report| or |letter|, which are free-standing; and those which are extensions or variations of other classes—for example, the |proc| document class, which is built on the |article| document class.

Thus, a company might have a local |ownlet| class for printing letters with their own headed notepaper. Such a class would build on top of the existing |letter| class but it cannot be used with any other document class, so we have |ownlet.cls| rather than |ownlet.sty|.

The |graphics| package, in contrast, provides commands for including images into a LATEX document. Since these commands can be used with any document class, we have |graphics.sty| rather than |graphics.cls|.